package lu.med.praxiswahl.wahlumed.client.utilities;

import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;

import javax.swing.ImageIcon;
import javax.swing.JPanel;

@SuppressWarnings("serial")
public class ImageModule extends JPanel {
	/**
	 * Speichert die Grafik, die in das Panel zu zeichnen ist.
	 */
	private Image image;

	public ImageModule(/* String imageFile */) {
		super();
		// if (imageFile.equals("")) {
		// return;
		// }
		// image = getToolkit().getImage(imageFile);

		ImageIcon img = new ImageIcon(getClass().getResource("/logo.jpg"));
		image = img.getImage();
	}

	/**
	 * L&auml;dt eine neue Grafik und ersetzt damit die alte.
	 * 
	 * @param imageFile
	 *            Pfad zur Grafik
	 */
	public void loadImage(String imageFile) {
		if (imageFile.equals("")) {
			return;
		}
		image = null;
		image = getToolkit().getImage(imageFile);
		MediaTracker mt = new MediaTracker(this);
		mt.addImage(image, 0);
		try {
			mt.waitForAll();
		} catch (InterruptedException ex) {
		} finally {
			this.repaint();
		}
	}

	@Override
	public void paint(Graphics g) {
		super.paint(g);
		// Zeichnet das Bild
		if (image != null) {
			double imageHeight, imageWidth, imagePosX, imagePosY;
			imageWidth = image.getWidth(this);
			imageHeight = image.getHeight(this);
			if ((imageWidth != -1) && (imageHeight != -1)) {
				// Nur wenn kein Fehler vorliegt wird fortgefahren
				// Faktor, der bei der Skalierung beachtet werden muss
				if (imageWidth > imageHeight) {
					// Benutzt die volle Breite
					double fac = imageWidth / imageHeight;
					imageWidth = this.getWidth();
					imageHeight = (imageWidth / fac);
					imagePosX = 0.0;
					imagePosY = ((this.getHeight() / 2.0) - (imageHeight / 2));
					g.drawImage(image, (int) imagePosX, (int) imagePosY,
							(int) imageWidth, (int) imageHeight, this);
				} else {
					// Benutzt die volle Hoehe
					double fac = imageHeight / imageWidth;
					imageHeight = this.getHeight();
					imageWidth = (imageHeight / fac);
					imagePosX = (this.getWidth() / 2) - (imageWidth / 2);
					imagePosY = 0.0;
					g.drawImage(image, (int) imagePosX, (int) imagePosY,
							(int) imageWidth, (int) imageHeight, this);
				}
			}
		}
	}
}
